package cn.itcast.service.system.impl;

import cn.itcast.dao.system.RoleDao;
import cn.itcast.domain.system.Role;
import cn.itcast.service.system.RoleService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;

@Service
public class RoleServiceImpl implements RoleService {

    @Autowired
    private RoleDao roleDao;


    //使用分页查询所有
    public PageInfo findAll(int page, int size,String companyId) {
        PageHelper.startPage(page,size);
        //调用dao层查询所有
        List<Role> list = roleDao.findAll(companyId);
        return new PageInfo(list);
    }

    //查询所有角色
    public List<Role> findAll(String companyId) {
        //调用roleDao层
        List<Role> roleList= roleDao.findAll(companyId);
        return roleList;
    }

    //保存角色数据
    public void save(Role role) {
        //封装id
        role.setId(UUID.randomUUID().toString());
        //封装创建时间和修改时间
        SimpleDateFormat sif = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
        String time = sif.format(date);
        role.setCreateTime(time);
        role.setUpdateTime(time);

        //调用dao层  将数据保存到数据库中
        roleDao.save(role);
    }

    //根据ID查询角色数据
    public Role findById(String id) {
        //调用roleService层查询数据
        Role role= roleDao.findById(id);
        return role;
    }

    //修改role数据
    public void update(Role role) {
        //调用roleDao层修改数据
        roleDao.update(role);
    }

    //根据ID删除页面
    public void delete(String id) {
        //调用roleDao层执行删除
        roleDao.delete(id);
    }

    //根据用户ID查询所属的角色ID
    public List<String> findByRoleId(String id) {
        //调用roleDao层查询所属角色ID
        List<String> list= roleDao.findByRoleId(id);
        return list;
    }

    //添加新的模块
    public void changeRole(String userid, String[] roleIds) {
        //根据指定用户的角色数据删除已存在的用户角色数据
            roleDao.deleteRole(userid);
        //保存所有的数据
        for (String roleId : roleIds) {
            roleDao.saveRole(userid,roleId);
        }
    }

    //根据角色ID查询角色所属的所有模块信息
    public List<String> findModuleIdsByRoleId(String roleId) {
        List<String> list= roleDao.findModuleIdsByRoleId(roleId);
        return list;
    }

    //保存所选择的模块信息
    public void updateRoleModule(String roleid, String moduleIds) {
        //1、根据当前角色的id删除已有的模块信息
        roleDao.deleteRoleModule(roleid);
        //以“，”切割字符串
        String[] ids = moduleIds.split(",");
        //新增选择的所有数据
        for (String moduleId : ids) {
            roleDao.saveRoleModule(roleid,moduleId);
        }
    }
}